﻿using Onshi.POS.Articulos.Vistas;
using Onshi.POS.Articulos;
using Onshi.POS.Formularios.Recursos;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Entidades.Tipos;
using Onshi.POS.Modelo.Objectos;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using Onshi.POS.Modelo.Enumeradores;

namespace Onshi.POS.Formularios
{
    public partial class ArticulosCompuestoDetalle : FormularioBase, IArticulosCompuestoDetalle
    {
        #region Constructores

        public ArticulosCompuestoDetalle(Int32 idArticulo)
        {
            InitializeComponent();
            presentador = new ArticulosCompuestoDetallePresentador(this);
            this.idArticulo = idArticulo;
        }

        #endregion

        #region Atributos

        private ArticulosCompuestoDetallePresentador presentador;
        private Int32 idArticulo;
        private Int32 idRubroArticulo;
        private Int32 idMarca;
        private Int32 idDescuentoRecargoCantidad;
        private Int32 idSubRubroArticulo;
        private Int32 idDescuentoRecargoFechaHora;

        #endregion

        #region Propiedades

        [Browsable(false)]
        public List<ArticuloCompuesto> ListadoArticulos
        {
            set { bsArticulos.DataSource = new SortableList<ArticuloCompuesto>(value); }
        }

        [Browsable(false)]
        public Int32 IdSubRubroArticulo
        {
            set { idSubRubroArticulo = value; }
        }

        [Browsable(false)]
        public String SubRubroArticuloNombre
        {
            set { txtSubRubroArticulo.Text = value; }
        }

        [Browsable(false)]
        public Byte[] Imagen
        {
            set { picImagen.Image = ManejoImagen.ByteAImagen(value); }
        }

        [Browsable(false)]
        public Int32 IdArticulo
        {
            get { return idArticulo; }
        }

        [Browsable(false)]
        public Int32 IdRubroArticulo
        {
            set { idRubroArticulo = value; }
        }

        [Browsable(false)]
        public Int32 IdMarca
        {
            set { idMarca = value; }
        }

        [Browsable(false)]
        public String TipoArticuloNombre
        {
            set { txtTipoArticulo.Text = value; }
        }

        [Browsable(false)]
        public Int32 IdDescuentoRecargoCantidad
        {
            set { idDescuentoRecargoCantidad = value; }
        }

        [Browsable(false)]
        public String Codigo
        {
            set { txtCodigo.Text = value; }
        }

        [Browsable(false)]
        public String Nombre
        {
            set { txtNombre.Text = value; }
        }

        [Browsable(false)]
        public String Estado
        {
            set { txtEstado.Text = value; }
        }

        [Browsable(false)]
        public String Observaciones
        {
            set { txtObservaciones.Text = value; }
        }

        [Browsable(false)]
        public String RubroArticuloNombre
        {
            set { txtRubroArticulo.Text = value; }
        }

        [Browsable(false)]
        public String DescuentoRecargoCantidadNombre
        {
            set { txtDescuentoRecargoCantidad.Text = value; }
        }

        [Browsable(false)]
        public String MarcaNombre
        {
            set { txtMarca.Text = value; }
        }

        [Browsable(false)]
        public String DescuentoRecargoFechaHoraNombre
        {
            set { txtDescuentoRecargoFechaHora.Text = value; }
        }

        [Browsable(false)]
        public String TipoComisionArticuloNombre
        {
            set { txtTipoComisionArticulo.Text = value; }
        }

        [Browsable(false)]
        public String TipoImpuestoArticuloNombre
        {
            set { txtTipoImpuestoArticulo.Text = value; }
        }

        [Browsable(false)]
        public Int32 IdDescuentoRecargoFechaHora
        {
            set { idDescuentoRecargoFechaHora = value; }
        }

        [Browsable(false)]
        public String Costo
        {
            set { txtCosto.Text = value; }
        }

        [Browsable(false)]
        public String Comision
        {
            set { txtComision.Text = value; }
        }

        [Browsable(false)]
        public String ComisionMaxima
        {
            set { txtComisionMaxima.Text = value; }
        }

        [Browsable(false)]
        public String Iva
        {
            set { txtIva.Text = value; }
        }

        [Browsable(false)]
        public String Impuesto
        {
            set { txtImpuesto.Text = value; }
        }

        [Browsable(false)]
        public List<ArticuloCampoPersonalizadoArticulo> ListadoCamposPersonalizados
        {
            set
            {
                var alto = 3;
                foreach (var item in value)
                {
                    var panel = new Panel();
                    panel.Name = Convert.ToString(item.Entidad.Id);
                    panel.Size = new Size(500, 45);
                    panel.Location = new Point(3, alto);
                    panel.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;

                    var etiqueta = new EtiquetaBase();
                    etiqueta.Location = new Point(3, 6);
                    etiqueta.AutoSize = true;
                    etiqueta.Text = item.Entidad.Nombre;

                    var texto = new TextoBase();
                    texto.Size = new Size(494, 20);
                    texto.Location = new Point(3, 22);
                    texto.BackColor = SystemColors.Control;
                    texto.ReadOnly = true;
                    texto.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                    texto.Text = item.Valor;

                    panel.Controls.Add(etiqueta);
                    panel.Controls.Add(texto);

                    panCamposPersonalizados.Controls.Add(panel);
                    alto += 51;
                }
            }
        }

        [Browsable(false)]
        public List<ArticuloListaPrecioVenta> ListadoListasPreciosVentas
        {
            set
            {
                var alto = 3;
                foreach (var item in value)
                {
                    var panel = new Panel();
                    panel.Name = Convert.ToString(item.Entidad.Id);
                    panel.Size = new Size(215, 45);
                    panel.Location = new Point(3, alto);
                    panel.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;

                    var etiqueta = new EtiquetaBase();
                    etiqueta.Location = new Point(3, 6);
                    etiqueta.AutoSize = true;
                    etiqueta.Text = item.ListaPrecioNombre;

                    var texto = new TextoBase();
                    texto.Size = new Size(150, 20);
                    texto.Location = new Point(3, 22);
                    texto.BackColor = SystemColors.Control;
                    texto.ReadOnly = true;
                    texto.TextAlign = HorizontalAlignment.Right;
                    texto.Text = item.PrecioFormato;

                    panel.Controls.Add(etiqueta);
                    panel.Controls.Add(texto);

                    panListasPreciosVentas.Controls.Add(panel);
                    alto += 51;
                }
            }
        }

        #endregion

        #region Eventos

        private void ArticulosServicioDetalle_Load(Object sender, EventArgs e)
        {
            try
            {
                presentador.Inicializar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, ConfigurationManager.AppSettings["NombreAplicacion"], MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnSalir_Click(Object sender, EventArgs e)
        {
            Close();
        }

        private void btnRubroArticulo_Click(Object sender, EventArgs e)
        {
            var rubrosArticulosDetalle = new RubrosArticulosDetalle(idRubroArticulo);
            rubrosArticulosDetalle.ShowDialog();
        }

        private void btnMarca_Click(Object sender, EventArgs e)
        {
            var marcasDetalle = new MarcasDetalle(idMarca);
            marcasDetalle.ShowDialog();
        }

        private void btnSubRubroArticulo_Click(Object sender, EventArgs e)
        {
            var subRubrosArticulosDetalle = new SubRubrosArticulosDetalle(idSubRubroArticulo);
            subRubrosArticulosDetalle.ShowDialog();
        }

        private void btnDescuentoRecargoCantidad_Click(Object sender, EventArgs e)
        {
            var descuentosRecargosCantidadesDetalle = new DescuentosRecargosCantidadesDetalle(idDescuentoRecargoCantidad);
            descuentosRecargosCantidadesDetalle.ShowDialog();
        }

        private void btnDescuentoRecargoFechaHora_Click(Object sender, EventArgs e)
        {
            var descuentosRecargosFechasHorasDetalle = new DescuentosRecargosFechasHorasDetalle(idDescuentoRecargoFechaHora);
            descuentosRecargosFechasHorasDetalle.ShowDialog();
        }

        private void grdArticulos_CellClick(Object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
                if (bsArticulos.Current != null && e.ColumnIndex == colProveedorDetalle.Index)
                {
                    switch (((EnumTiposArticulos)((ArticuloCompuesto)bsArticulos.Current).Entidad.Tipo.Id))
                    {
                        case EnumTiposArticulos.Estandar:
                            var articulosEstandarDetalle = new ArticulosEstandarDetalle(((ArticuloCompuesto)bsArticulos.Current).Entidad.Id);
                            articulosEstandarDetalle.ShowDialog();
                            break;
                        case EnumTiposArticulos.Servicio:
                            var articulosServicioDetalle = new ArticulosServicioDetalle(((ArticuloCompuesto)bsArticulos.Current).Entidad.Id);
                            articulosServicioDetalle.ShowDialog();
                            break;
                    }
                }
        }

        #endregion
    }
}
